using System;
using System.Collections.Generic;
using System.Text;

namespace Sedodream.Sudoku.Board
{
	public interface ICellGroup
	{
		/// <summary>
		/// Gets a unique id for this group.
		/// </summary>
		Guid GroupId
		{
			get;
		}
		IBoardData BoardData
		{
			get;
		}
		/// <summary>
		/// Gets the index for this group of cells.
		/// This is the index of this object in the <c>IBoardData</c> object.
		/// </summary>
		int Index
		{
			get;
		}
		/// <summary>
		/// List of cells associated with this object.
		/// </summary>
		IList<ICell> Cells
		{
			get;
		}
		bool IsPointInGroup(IPoint location);
		/// <summary>
		/// Gets an approximate for the complexity of this cell group.
		/// </summary>
		int? Complexity
		{
			get;
		}
		/// <summary>
		/// All values values contained in this column.
		/// </summary>
		IList<int> Values
		{
			get;
		}
		/// <summary>
		/// Gets the cell at the specified location
		/// </summary>
		/// <param name="index"></param>
		/// <returns></returns>
		ICell this[int index]
		{
			get;
		}
		/// <summary>
		/// Gets the type of group that this collection is.
		/// </summary>
		CellGroupType GroupType
		{
			get;
		}
	}
}
